<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>React 中事件处理</title>
</head>
<body>
  <div id="root"></div>
  <script src="../js/react.development.js"></script>
  <script src="../js/react-dom.development.js"></script>
  <script src="../js/babel.min.js"></script>
  <script type="text/babel">
    // 第一种方式，内联箭头函数，不推荐
    // class Demo extends React.Component {
    //   handleClick = (params, e) => {
    //     console.log('handleClick: ', params, e)
    //   }
    //   render() {
    //     return <button onClick={(e) => { this.handleClick('123', e); console.log('事件回调了') }}>点击传参</button>
    //   }
    // }

    // 第二种方式，bind 语法
    // class Demo extends React.Component {
    //   handleClick = (params, e) => {
    //     console.log('handleClick: ', params, e)
    //   }
    //   render() {
    //     return <button onClick={this.handleClick.bind(this, '123')}>点击传参</button>
    //   }
    // }

    // 第三种方式，函数柯里化
    class Demo extends React.Component {
      handleClick = (params) => {
        console.log('先调用了 handleClick，然后将 handleClick 的返回值（函数形式）做为事件回调函数')
        return function(e) {
          // 实际的回调函数处理
          console.log(params, e)
        }
      }
      render() {
        // 意思是将 handleClick 的函数调用结果做为事件处理函数
        return <button onClick={this.handleClick('1234')}>点击传参</button>
      }
    } 
    ReactDOM.render(<Demo />, document.getElementById('root'))
  </script>
</body>
</html>